import 'package:flutter/material.dart';
import 'package:flutter_base_widget/code2/second_page.dart';
import 'first_page.dart';

///代码清单2-2
///代码路径 lib/code2/code202_MaterialApp_Router.dart
//静态路由配置
void main() => runApp(MyApp2());

//定义根目录Widget
class MyApp2 extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      //配制路由规则
      routes: {
        //默认页面
        "/": (BuildContext context) => MyHomePage(), //默认创建的启动页面
        "/first": (BuildContext context) => FirstPage(), //自定义的页面
        "/second": (BuildContext context) => SecondPage(), //自定义的页面
      },
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("首页面"),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: () {
                //动态路由方式
                Navigator.of(context).push(
                  MaterialPageRoute(builder: (_) {
                    //FirstPage就是我们要打开的目标页面
                    return FirstPage();
                  }),
                );
              },
              child: Text("打开A页面"),
            ),
            SizedBox(height: 20),
            ElevatedButton(
                onPressed: () {
                  Navigator.of(context).pushNamed('/second');
                },
                child: Text("打开B页面")),
            SizedBox(height: 40),
            ElevatedButton(
              onPressed: () {
                //动态路由方式
                Navigator.of(context).push(
                  MaterialPageRoute(builder: (_) {
                    //FirstPage就是我们要打开的目标页面
                    return FirstPage();
                  }),
                );
              },
              child: Text("打开A页面 传参数"),
            ),
            SizedBox(height: 20),
            ElevatedButton(
                onPressed: () {
                  openBFunction();
                },
                child: Text("打开B页面 传参数")),
          ],
        ),
      ),
    );
  }
  ///代码清单2-3
  ///代码路径 lib/code2/code202_MaterialApp_Router.dart
  //打开B页面并获取B页面回传的值
  void openBFunction() async{
    Map<String, String> map = new Map();
    map["name"] = "张三";
    //跳转第二个页面
    //[arguments]传到第二个页面的参数
    dynamic result=await Navigator.of(context)
                          .pushNamed("/second", arguments: map);
    //如果不需要B页面返回值，在这里不处理await就可以
    //当B页面没有设置返回值时，B页面关闭，程序会回调这里 result 可能为null
    if(result!=null&&result is Map){
      //获取回传的值
      String name= result["name"];
      print("页面B关闭 name $name");
    }
  }
  ///代码清单2-5
  ///代码路径 lib/code2/code202_MaterialApp_Router.dart
  //动态路由方式打开A页面
  void openB() {
    //跳转第二个页面
    //在这里通过then函数来获取A页面关闭时回传的参数
    Navigator.of(context).push(new MaterialPageRoute(builder: (_) {
      ///直接通过构建函数来传参数
      return new FirstPage(title: "这是传递的参数");
    })).then((value) {
      if (value) {
        Map<String, String> resultMap = value;
        print("页面二回传的数据是 ${resultMap['name']}");
      }
    });
  }


}
